<script type="text/javascript">

  const activeConst = {
    STOP: 0,//关闭
    START: 5,//开启
    STATUS_END: 20,//已结束
    MODEL_NORMAL: 0,//普通模式
    MODEL_GIFT: 5//礼物模式
  };
  const commonConst = {
    YES: 5,//是
    NO: 0//否
  };
  const playSort = {
    SORT_VOTE_NUM_DESC: 0,//按总票数降序
    SORT_NO_DESC: 10//按参与时间降序
  };
  //规则rule
  const ruleConst = {
    RULE_SUBSCRIBE_NOTHING: 0,//投票前不需要关注
    RULE_SUBSCRIBE_NEED_BEFORE_VOTE: 5,//投票前需要关注
    RULE_SUBSCRIBE_NEED_BEFORE_APPLY: 10,//参加前需要关注
    RULE_SUBSCRIBE_NEED_BEFORE_VOTE_AND_APPLY: 15,//投票或报名参加前需要关注
    RULE_SEND_GIFT_ANONYMOUS_YES: 1,//匿名送礼
  };
  const contentConst = {
    CONTENT_EVERYDAY_STAR_OPEN: 1,//每日之星开
    CONTENT_EVERYDAY_STAR_CLOSE: 0,//每日之星关
    CONTENT_VOICE_CLOSE: 0,//语音播报关
    CONTENT_VOICE_OPEN: 1,//语音播报开
    CONTENT_JUMP_TO_GIFT_PAGE_AFTER_CLICK_AD_YES: 1,//点击广告后跳转到礼物界面
    CONTENT_JUMP_TO_GIFT_PAGE_AFTER_CLICK_AD_NO: 0//点击广告后不跳转到礼物界面
  };
  const pageConst = {
    BANNER_DM_OPEN: 1,//弹幕及海报功能开
    BANNER_DM_CLOSE: 0,//弹幕及海报功能关
    PAGE_SHOW_GIFT_LIST_ON_USER_HOME_YES: 1,//用户主页显示礼物列表
    PAGE_SHOW_GIFT_LIST_ON_TOP_YES: 1,//选手页最上方显示前5名头像和票数

  };
 const giftConst = {
   GIFT_SHOW_GIFT_RECORD_REAL_TIME: 1,//显示实时送礼物

  };
  const applyConst = {
    //报名设置
    APPLY_SHOW_OTHER_FIELD_NO: 0,//不显示其它字段
    APPLY_SHOW_OTHER_FIELD_YES: 5//显示其它字段
  };
  const adConst = {
    ACTION_NONE:0,//无操作
    ACTION_LINK:5,//到指定链接
    ACTION_TO_RANK:10,//到排行页
  }
  const payConst = {
    TYPE_TP_GIFT: 5,//支付类型投票的礼物
    TYPE_TP_COMMENT: 6//支付类型投票的弹幕
  }

  function commonFun () {
    console.log('公共方法')
  }

  function getQueryString (name) {
    let reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i')
    let r = window.location.search.substr(1).match(reg) //获取url中"?"符后的字符串并正则匹配
    let context = ''
    if (r != null) {
      context = r[2]
    }
    reg = null
    r = null
    return (context == null || context === '' || context === 'undefined') ? null : context
  }

  /**
   * 获取全路径oss文件地址
   * @param orgUrl 相对地址
   * @param small 是否是小图
   * @param icon 是否是图标
   * @returns {string}
   */
  function getUrl(orgUrl,small=false,icon=false) {
    if(checkUrl(orgUrl)){
      return orgUrl;
    }
    let mainData = getMainData()
    let url = mainData.siteConfig.baseImgUrl
    return url + orgUrl + (small ? '!small' : '') + (icon ? '!icon' : '')
  }
  /**
   * @return {boolean}
   */
  function checkUrl(urlString){
    if(urlString!==""){
      let reg=/(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?/;
      if(!reg.test(urlString)){
        return false
      }
      return true
    }
  }

  function getHostWithProtocal () {
    let protocal = window.location.protocol
    let host = window.location.host
    return protocal + '//' + host
  }

  function convertUTCTimeToLocalTime (UTCDateString) {
    if (!UTCDateString) {
      return '-'
    }

    function formatFunc (str) {    //格式化显示
      return str > 9 ? str : '0' + str
    }

    let date2 = new Date(UTCDateString)     //这步是关键
    let year = date2.getFullYear()
    let mon = formatFunc(date2.getMonth() + 1)
    let day = formatFunc(date2.getDate())
    let hour = date2.getHours()
    // let noon = hour >= 12 ? 'PM' : 'AM';
    // hour = hour >= 12 ? hour - 12 : hour;
    // hour = formatFunc(hour);
    let min = formatFunc(date2.getMinutes())

    return year + '-' + mon + '-' + day + ' ' + hour + ':' + min
  }

  //格式化价格
  function formatPrice (price) {    //格式化显示
    return price / 100
  }

  function localSet (key, value, expires) {
    //存储,可设置过期时间
    let params = { key, value, expires }
    if (expires) {
      // 记录何时将值存入缓存，毫秒级
      var data = Object.assign(params, { startTime: new Date().getTime() })
      localStorage.setItem(key, JSON.stringify(data))
    } else {
      if (Object.prototype.toString.call(value) == '[object Object]') {
        value = JSON.stringify(value)
      }
      if (Object.prototype.toString.call(value) == '[object Array]') {
        value = JSON.stringify(value)
      }
      localStorage.setItem(key, value)
    }
  }

  function localGet (key) {
    let item = localStorage.getItem(key)
    // 先将拿到的试着进行json转为对象的形式
    try {
      item = JSON.parse(item)
    } catch (error) {
      // eslint-disable-next-line no-self-assign
      item = item
    }
    // 如果有startTime的值，说明设置了失效时间
    if (item && item.startTime) {
      let date = new Date().getTime()
      // 如果大于就是过期了，如果小于或等于就还没过期
      if (date - item.startTime > item.expires) {
        localStorage.removeItem(name)
        return false
      } else {
        return item.value
      }
    } else {
      return item
    }
  }

  function sesscionSet (key, value, expires) {
    //存储,可设置过期时间
    let params = { key, value, expires }
    if (expires) {
      // 记录何时将值存入缓存，毫秒级
      var data = Object.assign(params, { startTime: new Date().getTime() })
      sessionStorage.setItem(key, JSON.stringify(data))
    } else {
      if (Object.prototype.toString.call(value) == '[object Object]') {
        value = JSON.stringify(value)
      }
      if (Object.prototype.toString.call(value) == '[object Array]') {
        value = JSON.stringify(value)
      }
      sessionStorage.setItem(key, value)
    }
  }

  function sessionGet (key) {
    let item = sessionStorage.getItem(key)
    // 先将拿到的试着进行json转为对象的形式
    try {
      item = JSON.parse(item)
    } catch (error) {
      // eslint-disable-next-line no-self-assign
      item = item
    }
    // 如果有startTime的值，说明设置了失效时间
    if (item && item.startTime) {
      let date = new Date().getTime()
      // 如果大于就是过期了，如果小于或等于就还没过期
      if (date - item.startTime > item.expires) {
        sessionStorage.removeItem(name)
        return false
      } else {
        return item.value
      }
    } else {
      return item
    }
  }

  function setMainData (data) {
    sesscionSet('mainData', data, 1000 * 60 * 10)
  }

  function getMainData () {
    return sessionGet('mainData')
  }

  // 暴露出这些属性和方法
  export default {
    commonConst,
    adConst,
    activeConst,
    playSort,
    ruleConst,
    applyConst,
    contentConst,
    pageConst,
    giftConst,
    payConst,
    setMainData, getMainData,
    localSet, localGet, sesscionSet, sessionGet,
    commonFun,
    formatPrice,
    convertUTCTimeToLocalTime,
    getUrl,
    getQueryString,
    getHostWithProtocal
  }
</script>
